﻿using System;
using System.Collections;
using System.Linq;
using System.Web;

/// <summary>
/// Descripción breve de ctrl
/// </summary>
public class ctrlInscripcion
{
    MySqlClase mysql = new MySqlClase();
    ClaseAlumnoDatos datosAl;
    bool ok = false;
    ArrayList deudas;
    int idX = 0;

    string sql = "", msj = "";

    public string Msj
    {
        get { return msj; }
        set { msj = value; }
    }

    public bool buscarMatricula(string matricula) {
        string sql_op = "";
        bool inscrito = false;//true ya esta inscrito ...  false no esta inscrito
        sql = "select matricula, nombre from alumnos where matricula="+matricula+";";
        sql_op = "select * from alumnos a where a.estado like '%no%' and matricula ='" + matricula + "'";
        try
        {
            if (mysql.AbrirConexion())
            {
                mysql.Consultar(sql);//busca si existe la matricula
                while (mysql.DatosConsulta.Read())
                {
                    ok = true;
                    msj = mysql.DatosConsulta.GetString(1); //SI EXISTE :)
                    mysql.CerrarConexion();//para volver a hacer una consulta
                    //busca sus ADEUDOS.
                    if (ok)
                    {
                        if (this.Lis_deudas(matricula) == false)
                        {
                            //NO TIENE ADEUDOSS
                            //OBTENER LOS DATOS
                            mysql.AbrirConexion();
                            mysql.Consultar(sql_op);
                            while (mysql.DatosConsulta.Read())
                            {
                                inscrito = true; //ya está inscrito
                                ok = true;//para avanzar en el proceso :)
                                mysql.CerrarConexion();
                                if (this.buscarReferencia(matricula) == false) { 
                                    //TODO: llamr a metodo par crear numero referencial
                                    this.obtenerDatosReinscripcion(matricula);
                                }
                            }
                            if (inscrito) { msj = "Usted ya ha sido inscrto."; }

                        }
                        else { msj = "Usted no está inscrito aún...Al parecer tiene adeduos pendientes..."; }//Tiene adeudos
                    }
                    else { msj = "NO se encontró la matrícula, verifique que esté bien escrito..."; }// si no encontró matricula
                }
                mysql.CerrarConexion();
            }
        }
        catch { }
        return ok;
    }

    /// <summary>
    /// trae los todos los datos del formato de reinscripción
    /// LLAMADA DESDE LA INTERFAZ FORMATO_REINS.ASPX para obtener y usar los datos en el formato.
    /// </summary>
    /// <param name="matricula"></param>
    /// <returns></returns>
    public ClaseAlumnoDatos obtenerDatosReinscripcion(string matricula) {
        sql = "select * from alumnos where matricula='" + matricula + "'";
        try {
            if (mysql.AbrirConexion()) {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read()) {
                    datosAl = new ClaseAlumnoDatos();
                    datosAl.Nombre = mysql.DatosConsulta.GetString("nombre");
                    datosAl.AP = mysql.DatosConsulta.GetString("apellidoPaterno");
                    datosAl.AM = mysql.DatosConsulta.GetString("apellidoMaterno");
                    datosAl.Direccion = mysql.DatosConsulta.GetString("direccion");
                    datosAl.Email = mysql.DatosConsulta.GetString("email");
                    datosAl.Tel = mysql.DatosConsulta.GetString("telefono");
                    datosAl.Cel = mysql.DatosConsulta.GetString("celular");
                    datosAl.T_sangre = mysql.DatosConsulta.GetString("tipo_sangre");
                    datosAl.Plan = mysql.DatosConsulta.GetString("plan");
                    datosAl.EdoCivil = mysql.DatosConsulta.GetString("estado_civil");
                }
                mysql.CerrarConexion();
            }
            datosAl.GrupoAnt = this.grupoAnt(matricula);
            datosAl.Grupoasig = this.grupoNuevo(matricula);
            datosAl.Carrera = this.carrera(matricula);

            this.crearReferencial(matricula, idX);
            datosAl.Referencia = this.nReferencial(matricula);
            
        }
        catch { }
        return datosAl;
    }


    /// <summary>
    /// busca si el alumno tiene adeudos.
    /// 
    /// </summary>
    /// <returns>true si tiene adeudos -- false si no tiene adeudos</returns>
    private bool Lis_deudas(string matricula) {
        deudas = new ArrayList();
        object[] datos = new object[3];
        ok = false;
        sql = "select * from `adeudo` a  where a.alunnos_matricula='" + matricula + "';";
        try {
            if (mysql.AbrirConexion()) {
                mysql.Consultar(sql);

                while (mysql.DatosConsulta.Read()) {
                    datos[0] = mysql.DatosConsulta.GetString(0);
                    datos[1] = mysql.DatosConsulta.GetString(2);
                    datos[2] = mysql.DatosConsulta.GetString(3);
                    ok = true;
                    deudas.Add(datos);
                }
                mysql.CerrarConexion();
            }
        }
        catch { }
        return ok;
    }

    /// <summary>
    /// TRUE si existe el numero referencial
    /// FASE no exite numero referencial
    /// </summary>
    /// <param name="matricula"></param>
    /// <returns></returns>
    private bool buscarReferencia(string matricula) {
        sql = "select * from alumno_ref  af where af.idperiodo=(select max(periodos.idperiodo) from periodos) and matricula='" + matricula + "';";
        ok = false;
        try
        {
            if (mysql.AbrirConexion()) {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read()) {
                    ok = true;//si existe numero referencial
                }
                mysql.CerrarConexion();
            }
        }
        catch { }

        return ok;
    }

    /// <summary>
    /// metodo que genera y guarda un numero referencial para los alumnos que no cuentan con uno para inscripcion.
    /// </summary>
    /// <returns></returns>
    private bool crearReferencial(string matricula, int car) {
        
        string nReferencial = "";
        nReferencial = car + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + matricula;
        sql = "insert into alumno_ref values(null,'"+matricula+"',current_date(),'"+nReferencial+"',(select max(periodos.idperiodo) from periodos));" ;
        try
        {
            mysql.AbrirConexion();
            ok = mysql.EjecutarSql(sql);
            mysql.CerrarConexion();
        }
        catch { }
        return ok;
    }

    ///Metodos para obtener datos del alumno

    
    /// <summary>
    /// regresa el grupo anterior del alumno
    /// </summary>
    /// <param name="matricula"></param>
    /// <returns></returns>
    private string grupoAnt(string matricula){
        string grupo = "";


        sql = @"select g.grupo from grupo g, alumnosgrupo ag, periodos p where g.idperiodos=(select max(p.idperiodo-1) from periodos p) and ag.grupo_idgrupo=g.idgrupo and ag.alunnos_matricula='" + matricula + "' group by ag.alunnos_matricula;";

        try {
            if (mysql.AbrirConexion()) {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read()) {
                    grupo = mysql.DatosConsulta.GetString(0);
                }
                mysql.CerrarConexion();
            }
        }
        catch { }



        return grupo;
    }
    /// <summary>
    /// regresa grupo asignado del alumno
    /// </summary>
    /// <param name="matricula"></param>
    /// <returns></returns>
    private string grupoNuevo(string matricula) {
        string sql = "select g.grupo from grupo g, alumnosgrupo ag, periodos p where g.idperiodos=(select max(p.idperiodo) from periodos p) and grupo_idgrupo=g.idgrupo and ag.alunnos_matricula='" + matricula + "' group by ag.alunnos_matricula;";
        string grupo = "";
        try
        {
            if (mysql.AbrirConexion())
            {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read())
                {
                    grupo = mysql.DatosConsulta.GetString(0);
                }
                mysql.CerrarConexion();
            }
        }
        catch { }
        return grupo;
    }
    /// <summary>
    /// regresa la carrera del alumno reinscrito
    /// </summary>
    /// <param name="matricula"></param>
    /// <returns></returns>
    private string carrera(string matricula) {
        sql = @"select c.carrera, c.idcarrera from grupo g, alumnosgrupo ag, periodos p, carreras c
where g.idperiodos=(select max(p.idperiodo) from periodos p) 
and ag.grupo_idgrupo=g.idgrupo and ag.alunnos_matricula='"+matricula+"' and g.carrera_idcarrera=c.idcarrera group by ag.alunnos_matricula;";
        idX = 0;
        string carrera = "";
        try
        {
            if (mysql.AbrirConexion())
            {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read())
                {
                    carrera = mysql.DatosConsulta.GetString(0);
                    idX = mysql.DatosConsulta.GetInt32(1);
                }
                mysql.CerrarConexion();
            }
        }
        catch { }

        return carrera;
    }
    /// <summary>
    /// regresa el numero referencial del alumno
    /// </summary>
    /// <param name="matricula"></param>
    /// <returns></returns>
    private string nReferencial(string matricula) {
        sql = @"select af.numReferencial from alumno_ref  af where af.idperiodo=(select max(periodos.idperiodo) from periodos) and matricula='" + matricula + "'";
        string referencia = "";
        try
        {
            if (mysql.AbrirConexion())
            {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read())
                {
                    referencia = mysql.DatosConsulta.GetString(0);
                }
                mysql.CerrarConexion();
            }
        }
        catch { }
        return referencia;
    }
    /// <summary>
    /// metodo que devuelve un string con ceros concatenados si el numero de entrada es menor qeu 10
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    private string id_conCeros(int id) {
        if (id < 10) { return "0" + id; }
        else { return id.ToString(); }
    }

    /// <summary>
    /// regresa true si el alumno esta inscrto
    /// regresa false si no esta insctito
    /// </summary>
    /// <param name="matricula"></param>
    /// <returns></returns>
    public bool esInscrito(string matricula) {
        sql = "select matricula from alumnos where matricula='" + matricula + "' and estado='inscrito';";
        ok = false;
        try {
            if (mysql.AbrirConexion()) {
                mysql.Consultar(sql);
                while (mysql.DatosConsulta.Read()) {
                    ok = true;
                }
            }
            mysql.CerrarConexion();
        }
        catch { }
        return ok;
    }

}